package com.atguigu.sql.util

import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession

/**
 * description ：SparkSession相关工具类
 * author      ：剧情再美终是戏 
 * mail        : 13286520398@163.com
 * date        ：Created in 2020/1/11 10:01
 * modified By ：
 * version:    : 1.0
 */
object MySparkSessionUtil {


  /**
   * 获取 SparkSession 默认本地模式
   *
   * @Author 剧情再美终是戏
   * @Date 2020/1/11 10:06
   * @param args main方法入口参数
   * @return org.apache.spark.sql.SparkSession
   * @Version 1.0
   **/
  def get(args: Array[String]): SparkSession = {
    get(args = args, isLocal = true)
  }


  /**
   * 获取 SparkSession
   *
   * @Author 剧情再美终是戏
   * @Date 2020/1/11 10:05
   * @param args    main方法入口参数
   * @param isLocal 是否本地模式
   * @return org.apache.spark.sql.SparkSession
   * @Version 1.0
   **/
  def get(args: Array[String], isLocal: Boolean): SparkSession = {
    // 1、创建sparkContext
    val conf = new SparkConf().setAppName("RddDemo")
    if (isLocal) {
      conf.setMaster("local[*]") // 默认情况下走本地模式
    }

    // 如果参数不为空，就设置初始化sparkContext的配置文件
    if (null != args && args.length > 0) {
      for (ag <- args) {
        if (null != ag) {
          val splits = ag.split("::")
          if (null != splits && splits.length == 2) {
            conf.set(splits(0), splits(1))
          }
        }
      }
    }
    // 返回sparkContext
    SparkSession.builder().config(conf).getOrCreate()
  }

  /**
   * 关闭 SparkSession 资源
   *
   * @Author 剧情再美终是戏
   * @Date 2020/1/11 10:05
   * @param sc
   * @return void
   * @Version 1.0
   **/
  def close(sc: SparkSession): Unit = sc match {
    case null => None
    case _ => sc.stop
  }

}
